每天简单JAVA教学:Modifier - 懒猫之家 - ITeye技术网站

创建时间:2015/8/26 21:37
来源:http://jgnan.iteye.com/blog/551127


昨天给大家介绍了怎么进行同一个类里面的方法调用,今天将会给大家说一下modifier以及不同类之间怎么进行方法调用。

首先来说一下modifier。它有四个值:public,private,default,protected.其中,当你不声明modifier的时候默认就为default。所以default不需要写出来。而且关键字default实际上也不是modifier,而是用于指示Annotation的默认值(感觉怪怪的。。)。

这个modifier其实是用于指示一个类的成员的访问策略。就是指示一个类的某个方法,或者字段,更或者是成员类是否可以被外部哪些成员类访问。来看下表:
名称策略
public可以供所有其它类访问
private只能供同一类内部访问
default可以被同一个package下面的其它类访问
protected只可以被自己及子类成员访问


为了弄明白怎么回事,我们需要做个稍微复杂一点的实验,首先大家创建以下的类:


然后,Modifier.java里面的代码如下:
Java代码
 收藏代码
  1. package modifier;  
  2.   
  3. public class Modifier {  
  4.     /** 
  5.      * 公共方法可以供所有其它类访问 
  6.       */  
  7.     public void publicMethod(){  
  8.         System.out.println("Everybody can visit me.");  
  9.     }  
  10.       
  11.     /** 
  12.      * 默认访问类型方法,可供同一个package的类访问 
  13.      */  
  14.     void defaultMethod(){  
  15.         System.out.println("Default method");  
  16.     }  
  17.       
  18.     /** 
  19.      * 受限类型方法,可以供自己或子类访问 
  20.      */  
  21.     protected void protectedMethod(){  
  22.         System.out.println("Hello my child!");  
  23.     }  
  24.       
  25.     /* 
  26.      * 私有类型方法,只能被内部调用 
  27.       */  
  28.     private void privateMethod()  
  29.     {  
  30.         System.out.println("I'm a selfish guy:p");  
  31.     }  
  32. }  


Neighbour代码:
  1. package modifier;  
  2.   
  3. public class Neighbour {  
  4.     public void visitDefault(){  
  5.         new Modifier().defaultMethod();  
  6.     }  
  7. }  


ChildClass代码:
Java代码
 收藏代码
  1. package modifier.child;  
  2.   
  3. import modifier.Modifier;  
  4.   
  5. public class ChildClass extends Modifier {  
  6.     public void visitProtected(){  
  7.         protectedMethod();  
  8.     }  
  9. }  


Foreigner代码:
Java代码
 收藏代码
  1. package modifier.child;  
  2.   
  3. import modifier.Modifier;  
  4.   
  5. public class Foreigner {  
  6.     public void visitPublic()  
  7.     {  
  8.          new Modifier().publicMethod();  
  9.     }  
  10. }  


除了以上的代码外,大家还可以自己做以下实验:
[list=1]
  • 在任何类里面通过new Modifier().publicMethod()来访问公共方法
  • 在任何类里面通过new Modifier().protectedMethod()来访问受限方法
  • 在任何类里面通过new Modifier().defaultMethod()来访问默认方法
  • 在任何类里面通过new Modifier().privateMethod()来访问私有方法
  • [/list]
    除了第一点会在所有类中都成功之外,其它的几条在上面几个类的实验中应该都只会在某个类中会成功。

    几个类的意义:
    类名代表意义
    ModifierModifier测试类
    NeighbourModifier的邻居类,和Modifier同处于一个package层级下。
    ChildClassModifier的继承类,继承了Modifier除了标有private和default以外的所有成员
    Foreigner跟Modifier没有任何关系的外类


    好了,在我们结束今天的内容之前,大约预习以下后面的内容:
    在例子里面,我们需要通过new Modifier()来访问Modifier类里面的东西,为什么呢?因为要访问一个类里面非静态(static)的成员,只有在把这个类的实例(instance)创建出来,分配了实际的地址段给它之后,它的成员才有对应的地址段可供访问。这就好比类是一个房子的设计蓝图,上面描述了房子的方方面面,面积啦,房间布局啦等等。但是如果房子一天没起,这些东西都不会具体话,也没办法住人。

    而new Modifier()就好像起房子一样。当然,明天我们说静态方法和恒定方法的时候,会再介绍另一种方法调用的方式。

    另外,关于继承。如果我们的一个类需要有某个类的大部分特点的时候,比如要写一个Apple类,而在此之前已经有一个叫Fruit的类了,而且Apple类含有Fruit的所有特征及一些自己特有的特征。那么在解决这类问题的时候就会用到继承的概念。方法很简单,就是在你的类名后面,使用extends关键字把父类和子类联系起来:
    Java代码
     收藏代码
    1. public class Child extends Parent  


    好了,今天就到此为止,谢谢大家观看。